/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorLexico.simbolos.SimboloLexico;

/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa la Lista de Parametro
 */
public class ListaParametro {
	
//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 *  Atributo que contiene el tipo de dato del parametro
	 */
	private TipoDato tipoDato;
	
	/**
	 *  Atributo que contiene el identificaor de la variable del parametro
	 */
	private SimboloLexico identificadorVarible;

//	-------------------------------------------------------------------------------------------------
//	CONSTRUCTOR
//	-------------------------------------------------------------------------------------------------

	
	/**
	 * Constructor que permite crear un parametro
	 * @param tipoDato. Tipo de dato de un parametro
	 * @param identificadorVarible. Identificador de variable de un parametro
	 */
	public ListaParametro(TipoDato tipoDato, SimboloLexico identificadorVarible) {
		super();
		this.tipoDato = tipoDato;
		this.identificadorVarible = identificadorVarible;
	}
	
//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Parametro");
		
		if(tipoDato != null)
			miRaiz.add(tipoDato.getArbolVisual());
		
		if(identificadorVarible != null)
			miRaiz.add(new DefaultMutableTreeNode(identificadorVarible.getLexema()));
		
		return miRaiz;
	}
	
	/**
	 * @return
	 */
	public String getJavaCode() {
		String retornable = "";
		
		if(tipoDato != null)
			retornable+= tipoDato.getJavaCode()+" ";
		
		if(identificadorVarible != null)
			retornable+= identificadorVarible.getLexema();
		
		return retornable;
	}
//	-------------------------------------------------------------------------------------------------
//	Getters and Setters
//	-------------------------------------------------------------------------------------------------

	/**
	 * Metodo que nos retorna el valor de tipoDato
	 * @return  tipoDato. Valor retornado
	 */
	public TipoDato getTipoDato() {
		return tipoDato;
	}

	/**
	 * Metodo que permite asignar el valor de tipoDato
	 * @param tipoDato. Valor a asignar tipoDato
	 */
	public void setTipoDato(TipoDato tipoDato) {
		this.tipoDato = tipoDato;
	}

	/**
	 * Metodo que nos retorna el valor de identificadorVarible
	 * @return  identificadorVarible. Valor retornado
	 */
	public SimboloLexico getIdentificadorVarible() {
		return identificadorVarible;
	}

	/**
	 * Metodo que permite asignar el valor de identificadorVarible
	 * @param identificadorVarible. Valor a asignar identificadorVarible
	 */
	public void setIdentificadorVarible(SimboloLexico identificadorVarible) {
		this.identificadorVarible = identificadorVarible;
	}

}
